hello.c
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("BONITA");
MODULE_DESCRIPTION("module programming-Hello module");
static int __init module_begin(void){
printk("Hello, linux kernel module.\n");
return 0;
}
static void __exit module_end(void){
printk("Good Bye!\n");
}
module_init(module_begin);
module_exit(module_end);
Makefile
obj-m +=hello.o
all:
make -C /lib/modules/${shell uname -r}/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
make 과정
1. hello.o 파일 생성
2. modpost를 C 소스파일에 적용해 .ko에서 요구되는 추가 정보를 부착하여 hello.mod.c를 생성한 후 컴파일
-> hello.mod.o 생성
3. 두개의 .o 파일을 링크하여 .ko(kernel object) 파일 생성
모듈 적재(loading) & 제거(unloading)
$insmod hello.ko // 모듈 로딩
$lsmod // 적재된 모듈 확인
$rmmod hello // 모듈 제거 (.ko를 붙이지 않는다.)
모듈 동작 확인
$dmesg
$tail -f /var/log/kern.log // -f 옵션을 통해 지속적인 변화 출력